package main

import (
	"fmt"
)

// 空接口  任何类型都可以实现空接口
// type EM interface{}
// 空接口可以直接当作类型来使用
// 空接口作为函数的参数
// func show(a interface{}){
// 	fmt.Printf("值:%v 类型:%T",a,a)
// }
// 定义一个方法 可以传入任意数据类型
	// func Myprint(x interface{}) {
	// 	if _,ok :=x.(string);ok{
	// 		fmt.Println("string类型")
	// 	}else if _,ok:=x.(int);ok {
	// 			fmt.Println("int类型")
	// 	}else if _,ok :=x.(int);ok{
	// 		fmt.Println("bool类型")
	// 	}
	// }
		func Myprint2(x interface{}) {
			// 通过x.(type)来判断类型 这个语句只能用在switch里面
			switch x.(type){
			case int:
				fmt.Println("int类型")
			case string:
				fmt.Println("string类型")
			case bool:
				fmt.Println("bool类型")
			default:
				fmt.Println("传入错误...")
			}


	}
func main(){
	// var m =make(map[string]string)
	// m ["username"]="zhangsan "
	// m ["age"]="30"
	// fmt.Println(m)
	// map类型里面的数据可以是任意值
	// var m =make(map[string]interface{})
	// m ["username"]="zhangsan "
	// m ["age"]="30"
	// m ["married"]=true
	// fmt.Println(m)
	// 使用interface来定义切片
	// var s1 =[]interface{}{"2132",12412,4,21,true}
	// fmt.Println(s1)

	// 定义一个方法 可以传入任意类型数据,然后根据不同的类型实现不同的功能

	// 类型断言
	// var s interface{}
	// s ="你好golang"
	// v,ok :=s.(string)
	// if ok{
	// 	fmt.Printf("a就是一个string类型的 值是:%v",v)
	// }else{
	// 	fmt.Println("断言失败")
	// }

	// show(20)
	// // 传入一个切片类型
	// slice :=[]int{1,2,34,4}
	// show(slice)
	// var a interface{}
	// a =20
	// fmt.Printf("值:%v 类型:%T",a,a)

	// a="你好golang"
	// fmt.Printf("值:%v 类型:%T",a,a)

	// a =true
	// fmt.Printf("值:%v 类型:%T",a,a)

	// var a EM  //定义一个接口类型的变量
	// var str ="你好golang"
	// a =str  //让字符串实现A这个接口
	// fmt.Printf("值:%v 类型:%T",a,a)

	// var num =20
	// a =num   //表示让int类型实现em这个接口
	// fmt.Printf("值:%v 类型:%T",a,a)
	// var flag =true
	// a =flag   //表示让int类型实现em这个接口
	// fmt.Printf("值:%v 类型:%T",a,a)
	// Myprint("你好 golang")
	Myprint2("n你好呀 golang")
}